$(function() {


    // $(window).on('scroll', function() {

    //     let pageHeight = $('body').height(),
    //         scrollTop = $(window).scrollTop(),
    //         winHeight = $(window).height(),
    //         thresold = pageHeight - scrollTop - winHeight

    //     if (thresold > -100 && thresold <= 20) {
    //         console.log('end');
    //     }

    // })

    /**
     * 通过设置标志位 当处于延迟函数中，标志位为false，外部始终return，直到当前延迟函数执行完毕，标志位转 true 才可执行
     * @param {用户函数} fn 
     * @param {延迟时间} interval 
     */
    function throttle(fn, interval = 300) {

        // debounce
        let canRun = true

        return function() {
            if (!canRun) return
            canRun = false
            setTimeout(() => {
                fn.apply(this, arguments)
                canRun = true
                    /**
                     * 在这个延迟函数中，canRun始终是false，
                     * 也就是上面判断canRun后 会return出去，
                     * 直到该延迟完毕，canRun才会改成true
                     */

            }, interval);
        }
    }

    /**
     * 通过定义延迟函数，如果重新进入，那么清空当前时间，重新定义一个时间
     * @param {用户函数} fn 
     * @param {延迟时间} interval 
     */
    function debounce(fn, interval = 1500) {
        let timeout = null

        return function() {

            clearTimeout(timeout)
            timeout = setTimeout(() => {

                fn.apply(this, arguments)
            }, interval)
        }
    }

    $('.test2 input').on('input', debounce(function() {
        console.log('object');
    }))

    $(window).on('scroll', throttle(function() {

        let pageHeight = $('body').height(),
            scrollTop = $(window).scrollTop(),
            winHeight = $(window).height(),
            thresold = pageHeight - scrollTop - winHeight

        if (thresold > -100 && thresold <= 20) {
            console.log('end');
        }

    }))


})